import logging
#编程的方式写一些高级写法
#创建笔（记录器）
#笔的名字默认是root,现在改成applog
logger=logging.getLogger("applog")
#笔的告警等级默认是warning,现在改成debug
#logger.setLevel(logging.INFO)
# print(logger)
# print(type(logger))
logger.setLevel(logging.DEBUG)

#处理器handler（告诉笔往哪里写），如果这里的级别和logger级别冲突，以logger级别为准
#创建往控制台输出的一个handler
consoleHandler=logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)

#创建一个向文件输出的handler,这个handler不指定输出级别，则默认用笔logger的输出级别
lcfilehandler=logging.FileHandler(filename='addDemo.log',mode='w')
lcfilehandler.setLevel(logging.INFO)

#formatter格式,定义一个格式
formatter=logging.Formatter("%(asctime)s|%(levelname)-8s|%(filename)s:%(lineno)s|%(message)s")

#给处理器handler设置格式，设置绑定关系
consoleHandler.setFormatter(formatter)
lcfilehandler.setFormatter(formatter)

#记录器（笔）设置处理器handler，设置绑定关系
logger.addHandler(consoleHandler)
logger.addHandler(lcfilehandler)

 #定义过滤器（定义笔和handler的，笔的名字必须是以cn.cccb开头的才往handler里面输出）
flt=logging.Filter("applog")
# #关联过滤器,这里给记录器添加过滤，如果不符合条件，则文件和终端handler都不输出
logger.addFilter(flt)
#给handler添加过滤器，只能是输出applog这个过滤器下的日志，如果记录器的名字不是applog,则不会往lcfilehandler里输出，但是控制台输出不受影响
#lcfilehandler.addFilter(flt)


#打印日志的代码
#注意这块要用记录器输出，不要用logging，否则还是warning级别的，之前定义的笔就没生效
# logging.debug("This is debug log")
# logging.info("This is info log")
# logging.warning("This is warning log")
# logging.error("This is error log")
# logging.critical("This is critical log")

logger.debug("This is debug log")
logger.info("This is info log")
logger.warning("This is warning log")
logger.error("This is error log")
logger.critical("This is critical log")
#print(logger)
